KFbxMesh Class Reference

#include <kfbxmesh.h>
Inheritance diagram for KFbxMesh:
Inheritance graph
[legend]

List of all members.


Detailed Description

A mesh is a geometry made of polygons.

The class can define a geometry with as many n-sided polygons as needed. Users can freely mix triangles, quadrilaterals, and other polygons. Since the mesh-related terminology of the FBX SDK differs a little from the known standards, here are our definitions:

Methods to initialize, set and access control points are provided in the KFbxGeometryBase class.

Definition at line 65 of file kfbxmesh.h.


Utility functions

enum   ESplitObject { eBY_NORMAL }
  Object of interest when splitting. More...
void  Reset ()
  Reset the mesh to default values.
void  ComputeVertexNormals (bool pCW=false)
  Compute the vertex normals on the mesh.
bool  CheckIfVertexNormalsCCW ()
  Compares the normals calculated by doing cross-products between the polygon vertex and by the ones stored in the normal array.
bool  CheckSamePointTwice ()
  Verify if the mesh has polygons that are defined on the same point more than once.
int  RemoveBadPolygons ()
  Remove bad polygons from a mesh.

Smooth mesh preview utility functions

enum   EMeshSmoothness {
   eHULL,
   eROUGH,
   eMEDIUM,
   eFINE
}
  Display Smoothness. More...
enum   EBoundaryRule {
   eLEGACY,
   eCREASE_ALL,
   eCREASE_EDGES
}
  the boundary rule. More...
KFbxMesh::EMeshSmoothness  GetMeshSmoothness () const
  Get display smoothness from mesh.
void  SetMeshSmoothness (KFbxMesh::EMeshSmoothness pSmoothness)
  Set the mesh display smoothness mode.
int  GetMeshPreviewDivisionLevels () const
  Get preview subdivision levels from mesh.
void  SetMeshPreviewDivisionLevels (int pPreviewDivisionLevels)
  Set mesh preview subdivision levels.
int  GetMeshRenderDivisionLevels () const
  Get render subdivision levels from mesh.
void  SetMeshRenderDivisionLevels (int pRenderDivisionLevels)
  Set mesh render subdivision levels.
bool  GetDisplaySubdivisions () const
  Query whether to display subdivisions isolines on mesh.
void  SetDisplaySubdivisions (bool pDisplySubdivisions)
  Set the DisplySubdivisions state.
EBoundaryRule  GetBoundaryRule () const
  Get BoundaryRule from mesh.
void  SetBoundaryRule (EBoundaryRule pBoundaryRule)
  Set BoundaryRule for this mesh.
bool  GetPreserveBorders () const
  Query whether to preserve borders when preview smooth mesh is enabled.
void  SetPreserveBorders (bool pPreserveBorders)
  Set the state of the PreserveBorders flag.
bool  GetPreserveHardEdges () const
  Query whether to preserve hard edges when preview smooth mesh.
void  SetPreserveHardEdges (bool pPreserveHardEdges)
  Set the state of the PreserveHardEdges flag.
bool  GetPropagateEdgeHardness () const
  Query whether to PropagateEdgeHardness when preview smooth mesh.
void  SetPropagateEdgeHardness (bool pPropagateEdgeHardness)
  Set state of the PropagateEdgeHardness flag.

Polygon Management

void  BeginPolygon (int pMaterial=-1, int pTexture=-1, int pGroup=-1, bool pLegacy=true)
  Begins the process of adding a polygon to the mesh.
void  BeginPolygonExt (int pMaterial, int *pTextures)
  Begin writing a polygon.
void  AddPolygon (int pIndex, int pTextureUVIndex=-1)
  Add a polygon vertex to the current polygon.
void  EndPolygon ()
  End writing a polygon, it should be called after adding one polygon.
int  GetPolygonCount () const
  Get the polygon count of this mesh.
int  GetPolygonSize (int pPolygonIndex) const
  Get the number of polygon vertices in a polygon.
int  GetPolygonGroup (int pPolygonIndex) const
  Get the current group ID of the specified polygon.
void  SetPolygonGroup (int pPolygonIndex, int pGroup) const
  Assign the specified polygon a group ID.
int  GetPolygonVertex (int pPolygonIndex, int pPositionInPolygon) const
  Get a polygon vertex (i.e: an index to a control point).
void  GetPolygonVertexNormal (int pPolyIndex, int pVertexIndex, KFbxVector4 &pNormal) const
  Get the normal associated with the specified polygon vertex.
int GetPolygonVertices () const
  Get the array of polygon vertices (i.e: indices to the control points).
int  GetPolygonVertexCount () const
  Gets the number of polygon vertices in the mesh.
int  GetPolygonVertexIndex (int pPolygonIndex) const
  Gets the start index into the array returned by GetPolygonVertices() for the given polygon.
int  RemovePolygon (int pPolygonIndex)
  Remove the specified polygon from the mesh.

Texture UV Utility Functions.

The methods found in this section are utility functions used to handle UV coordinates quickly.

Internally, they refer to KFbxLayer and KFbxLayerElementUV methods to do the job. Except for the GetAllChannelUV(int pLayer), all the methods are implicitly working on Layer 0. Use the KFbxLayer methods to have access to the other layers.

void  InitTextureUV (int pCount, KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Init texture UV coordinates.
void  AddTextureUV (KFbxVector2 pUV, KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Add texture UV coordinates.
int  GetTextureUVCount (KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Get the number of texture UV coordinates.
int  GetUVLayerCount () const
  Get the number of layer containing at least one channel UVMap.
KArrayTemplate
< KFbxLayerElement::ELayerElementType
GetAllChannelUV (int pLayer)
  Fills an array describing, for the given layer, which texture channel have UVs associated to it.

Material, Texture and UV Indices Utility Functions.

The methods found in this section are utility functions used to handle Material, Texture and UV indices quickly.

Internally, they refer to KFbxLayer and KFbxLayerElementUV methods to do the job. These functions are only working on Layer 0. Use the KFbxLayer methods directly to access other layers.

void  InitMaterialIndices (KFbxLayerElement::EMappingMode pMappingMode)
  Initialize material indices.
void  InitTextureIndices (KFbxLayerElement::EMappingMode pMappingMode, KFbxLayerElement::ELayerElementType pTextureType)
  Initialize texture indices.
void  InitTextureUVIndices (KFbxLayerElement::EMappingMode pMappingMode, KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Initialize texture UV indices.
int  GetTextureUVIndex (int pPolygonIndex, int pPositionInPolygon, KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Get a texture UV index associated with a polygon vertex (i.e: an index to a control point).
void  SetTextureUVIndex (int pPolygonIndex, int pPositionInPolygon, int pIndex, KFbxLayerElement::ELayerElementType pTypeIdentifier)
  Set a texture UV index associated with a polygon vertex (i.e: an index to a control point).

Point Splitting/Merging utility functions

bool  SplitPoints (KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES)
  Split points.
bool  BuildMergeList (KArrayTemplate< int > &pMergeList, ESplitObject pObject, bool pExport=false)
  Insert the new indexes of the object that have to be merged.
void  MergePointsForPolygonVerteNormals (KArrayTemplate< int > &pMergeList)
  Merge the points specified in the list.

Edge management functions

void  BuildMeshEdgeArray ()
  Automatically generate edge data for the mesh.
int  GetMeshEdgeCount () const
  Query the number of edges defined on this mesh.
int  GetMeshEdgeIndex (int pStartVertexIndex, int pEndVertexIndex, bool &pReversed)
  Get the index for the edge between the given vertices.
int  GetMeshEdgeIndexForPolygon (int pPolygon, int pPositionInPolygon)
  Get the index for the specific edge of pPolygon.
void  GetMeshEdgeVertices (int pEdgeIndex, int &pStartVertexIndex, int &pEndVertexIndex) const
  Get the vertices for the given edge.
void  BeginGetMeshEdgeVertices ()
  Use this method before calling GetMeshEdgeVertices if making several calls to that method.
void  EndGetMeshEdgeVertices ()
  Use this method after calling GetMeshEdgeVertices if making several calls to that method.
void  SetMeshEdgeCount (int pEdgeCount)
  Presets the number edge data elements.
void  SetMeshEdge (int pEdgeIndex, int pValue)
  Sets element in edge array to specific value.
int  AddMeshEdgeIndex (int pStartVertexIndex, int pEndVertexIndex, bool pCheckForDuplicates)
  Add an edge with the given start/end points.
int  SetMeshEdgeIndex (int pEdgeIndex, int pStartVertexIndex, int pEndVertexIndex, bool pCheckForDuplicates)
  Set the index for the edge with the given start/end points.
void  BeginAddMeshEdgeIndex ()
  Call this before calling AddMeshEdgeIndex or SetMeshEdgeIndex to increase performance.
void  EndAddMeshEdgeIndex ()
  After calling AddMeshEdgeIndex or SetMeshEdgeIndex, EndAddMeshEdgeIndex should be called.
int  AddMeshEdgeIndexForPolygon (int pPolygonIndex, int pPositionInPolygon)
  Adds an edge for the specified polygon, and edge number within the polygon.
bool  SetMeshEdgeIndex (int pEdgeIndex, int pPolygonIndex, int pPositionInPolygon)
  Sets the specified edge to the specified polygon's edge.
void  ComputeComponentMaps (KFbxComponentMap &pEdgeToPolyMap, KFbxComponentMap &pPolyToEdgeMap)
  Compute component maps.
bool  IsTriangleMesh () const
  Determines if the mesh is composed entirely of triangles.

Crease utility functions

double  GetEdgeCreaseInfo (int pEdgeIndex)
  Get crease weight by edge index.
bool  GetEdgeCreaseInfoArray (KFbxLayerElementArrayTemplate< double > **pCreaseArray)
  Get crease edge array.
double  GetVertexCreaseInfo (int pVertexIndex)
  Get crease weight by vertex index.
bool  GetVertexCreaseInfoArray (KFbxLayerElementArrayTemplate< double > **pCreaseArray)
  Get vertex crease array.
bool  SetEdgeCreaseInfo (int pEdgeIndex, double pWeight)
  Set crease weight by edge index.
bool  SetEdgeCreaseInfoArray (KArrayTemplate< double > *pWeightArray)
  Set crease weight data array.
bool  SetVertexCreaseInfo (int pVertexIndex, double pWeight)
  Set crease weight by vertex index.
bool  SetVertexCreaseInfoArray (KArrayTemplate< double > *pWeightArray)
  Set crease weight data array.

Hole utility functions

bool  GetPolyHoleInfo (int pFaceIndex)
  Get hole flag by face index (an index to a polygon).
bool  GetPolyHoleInfoArray (KFbxLayerElementArrayTemplate< bool > **pHoleArray)
  Get hole flags Array.
bool  SetPolyHoleInfo (int pFaceIndex, bool pIsHole)
  Sets the flag indicating whether the face represents a hole or not.
bool  SetPolyHoleInfoArray (KArrayTemplate< bool > *pHoleArray)
  Set hole flags array.

Public Member Functions

virtual EAttributeType  GetAttributeType () const
  Return the type of node attribute.
void  ReservePolygonCount (int pCount)
  Reserve memory in the polygon array to hold the specified number of polygons.
void  ReservePolygonVertexCount (int pCount)
  Reserve memory in the polygon vertex array to hold the specified number of polygon vertices.
virtual KFbxObject Clone (KFbxObject *pContainer, KFbxObject::ECloneType pCloneType) const
  Creates a clone of this object.
bool  GetTextureUV (KFbxLayerElementArrayTemplate< KFbxVector2 > **pLockableArray, KFbxLayerElement::ELayerElementType pTypeIdentifier=KFbxLayerElement::eDIFFUSE_TEXTURES) const
bool  GetMaterialIndices (KFbxLayerElementArrayTemplate< int > **pLockableArray) const
bool  GetTextureIndices (KFbxLayerElementArrayTemplate< int > **pLockableArray, KFbxLayerElement::ELayerElementType pTextureType) const

Classes

class   KDuplicateVertex
  Internal structure used to keep the duplicate vertex information. More...
struct   KFbxComponentMap
  Internal structure used to keep the mapping information between edges and polygons. More...
class   KVertexNormalInfo
  Internal structure used to compute the normals on a mesh. More...

Member Enumeration Documentation

Object of interest when splitting.

Enumerator:
eBY_NORMAL  Each split point will have a different normal for polygon/vertex.

This is for normal mapping emulation.

Definition at line 389 of file kfbxmesh.h.

Display Smoothness.

It represents smooth mesh preview mode. This concept is not used in the FBX SDK but simply carried over so applications can access it and perform the appropriate tasks.

Enumerator:
eHULL  Default value, not active "smooth mesh preview".
eROUGH  Not active "smooth mesh preview".
eMEDIUM  Both display cage and smooth mesh.
eFINE  Display smooth mesh.

Definition at line 697 of file kfbxmesh.h.

the boundary rule.

Enumerator:
eLEGACY  Default value.
eCREASE_ALL  Used for hard corner.
eCREASE_EDGES  Used for round corner.

Definition at line 708 of file kfbxmesh.h.


Member Function Documentation

virtual EAttributeType GetAttributeType (  )  const [virtual]

Return the type of node attribute.

Returns:
Return the type of this node attribute which is EAttributeType::eMESH.

Reimplemented from KFbxGeometry.

void BeginPolygon ( int  pMaterial = -1,
int  pTexture = -1,
int  pGroup = -1,
bool  pLegacy = true  
)

Begins the process of adding a polygon to the mesh.

Add vertexes to the polygon using AddPolygon. When the polygon is complete call EndPolygon to complete the creation of the polygon.

Parameters:
pMaterial  Index of material to assign to this polygon if material mapping type is eBY_POLYGON. Otherwise it must be -1.
pTexture  Index of texture to assign to this polygon if texture mapping type is eBY_POLYGON. Otherwise it must be -1.
pGroup  Group index assigned to polygon.
pLegacy  When set to true, automatically create a LayerElement of type Texture; This was the default behaviour of earlier versions of the FBX SDK. Since version 2010, the textures are connected to the material object.
Remarks:
This function must be called before AddPolygon(...).

If used, the pTexture index will reference textures assigned to the DIFFUSE channel ( KFbxLayerElement::eDIFFUSE_TEXTURES).

void BeginPolygonExt ( int  pMaterial,
int pTextures  
)

Begin writing a polygon.

Add vertexes to the polygon using AddPolygon. When the polygon is complete call EndPolygon to complete the creation of the polygon.

Parameters:
pMaterial  Index of material to assign to this polygon if material mapping type is eBY_POLYGON. Otherwise it must be -1.
pTextures  Array of index of texture (by texture type) to assign to this polygon if texture mapping type is eBY_POLYGON. Otherwise it must be an array of -1. This array is expected to be of size: KFbxLayerElement::LAYERELEMENT_TYPE_TEXTURE_COUNT. If one texture type is not used, the corresponding entry must be left at -1.

void AddPolygon ( int  pIndex,
int  pTextureUVIndex = -1  
)

Add a polygon vertex to the current polygon.

Parameters:
pIndex  Index in the table of the control points.
pTextureUVIndex  Index of texture UV coordinates to assign to this polygon if texture UV mapping type is eBY_POLYGON_VERTEX. Otherwise it must be -1.
Remarks:
After adding all the polygons of the mesh, call function "BuildMeshEdgeArray" to generate edge data for the mesh.

void EndPolygon (  ) 

End writing a polygon, it should be called after adding one polygon.

int GetPolygonCount (  )  const [inline]

Get the polygon count of this mesh.

Returns:
Return the number of polygons in the mesh.

Definition at line 124 of file kfbxmesh.h.

int GetPolygonSize ( int  pPolygonIndex  )  const [inline]

Get the number of polygon vertices in a polygon.

Parameters:
pPolygonIndex  Index of the polygon.
Returns:
The number of polygon vertices in the indexed polygon. If the polygon index is out of bounds, return -1.

Definition at line 131 of file kfbxmesh.h.

int GetPolygonGroup ( int  pPolygonIndex  )  const

Get the current group ID of the specified polygon.

A polygon group can be useful to identify a number of polygons that share the same properties. The FBX SDK does not use this information internally but guarantee its persitence in the FBX files and in memory.

Parameters:
pPolygonIndex  Index of the polygon.
Returns:
Group index assigned to the polygon. If the polygon index is out of bounds, return -1.

void SetPolygonGroup ( int  pPolygonIndex,
int  pGroup  
) const [inline]

Assign the specified polygon a group ID.

A polygon can only be assigned to one group at the time.

Parameters:
pPolygonIndex  Index of the polygon.
pGroup  Group index assigned to the polygon.
Returns:
Group index assigned to the polygon. If the polygon index is out of bounds, do nothing.

Definition at line 153 of file kfbxmesh.h.

int GetPolygonVertex ( int  pPolygonIndex,
int  pPositionInPolygon  
) const [inline]

Get a polygon vertex (i.e: an index to a control point).

Parameters:
pPolygonIndex  Index of queried polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonCount().
pPositionInPolygon  Position of polygon vertex in indexed polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonSize(pPolygonIndex).
Returns:
Return the polygon vertex indexed or -1 if the requested vertex does not exists or the indices arguments have an invalid range.

Definition at line 167 of file kfbxmesh.h.

void GetPolygonVertexNormal ( int  pPolyIndex,
int  pVertexIndex,
KFbxVector4 pNormal  
) const

Get the normal associated with the specified polygon vertex.

Parameters:
pPolyIndex  Index of the polygon.
pVertexIndex  Index of the vertex in the polygon.
pNormal  The returned normal.
Remarks:
pNormal remain unchanged if the requested vertex does not exists.

int* GetPolygonVertices (  )  const

Get the array of polygon vertices (i.e: indices to the control points).

This array is a concatenation of the list of polygon vertices of all the polygons. Example: a mesh made of 2 triangles with vertices [1,2,3] and vertices [2,3,4] results in [1,2,3,2,3,4]. The first polygon starts at position 0 and the second at position 3.

Returns:
The array of polygon vertices.

int GetPolygonVertexCount (  )  const

Gets the number of polygon vertices in the mesh.

Returns:
The overall size of the array of polygon vertices in the mesh.
Remarks:
This value can be smaller than the value returned by GetControlPointsCount() (meaning that not all of the control points stored in the object are used to define the mesh). However, typically, it will be much bigger since any given control point can be used to define a vertex on multiple polygons.

int GetPolygonVertexIndex ( int  pPolygonIndex  )  const

Gets the start index into the array returned by GetPolygonVertices() for the given polygon.

This method can be used for a faster access to the polygon vertices indices. If, for example, we want to access the indices for polygon 3, the following code would do the trick

 int lStartIndex = mesh.GetPolygonVertexIndex(3);
 if (lStartIndex == -1) return;
 int* lVertices = mesh.GetPolygonVertices()[lStartIndex];
 int lCount = mesh.GetPolygonSize(3);
 for (int i = 0; i < lCount; i++)
 {
     int vertexID = lVertices[i];
     ...
  }
Parameters:
pPolygonIndex  The polygon of interest.
Returns:
The index into the GetPolygonVertices() array.
Remarks:
If the polygon index is out of bounds, return -1.

int RemovePolygon ( int  pPolygonIndex  ) 

Remove the specified polygon from the mesh.

This method will automatically update the layers accordingly.

Parameters:
pPolygonIndex  Index of the polygon.
Returns:
Polygon index.
Remarks:
If the polygon index is out of bounds, return -1.

void InitTextureUV ( int  pCount,
KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  
)

Init texture UV coordinates.

Parameters:
pCount  Number of texture UV elements.
pTypeIdentifier  Specifies which texture channel this UV refers to.
Remarks:
pCount must equal the number of control points of the Mesh if the UV mapping mode is KFbxLayerElement::eBY_CONTROL_POINT.

void AddTextureUV ( KFbxVector2  pUV,
KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  
)

Add texture UV coordinates.

Appends a new element at the end of the array of texture UV coordinates.

Parameters:
pUV  Texture UV coordinates, ranging between 0 and 1.
pTypeIdentifier  Specifies which texture channel this UV refers to.
Remarks:
The final number of texture UV elements must equal the number of control points if the UV mapping mode is KFbxLayerElement::eBY_CONTROL_POINT.

int GetTextureUVCount ( KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  ) 

Get the number of texture UV coordinates.

Parameters:
pTypeIdentifier  The texture channel the UV refers to.

int GetUVLayerCount (  )  const

Get the number of layer containing at least one channel UVMap.

return 0 if no UV maps have been defined.

KArrayTemplate<KFbxLayerElement::ELayerElementType> GetAllChannelUV ( int  pLayer  ) 

Fills an array describing, for the given layer, which texture channel have UVs associated to it.

Parameters:
pLayer  Index of the layer.
Returns:
Array with the channel descriptor.
Remarks:
Only the channels that have UVs associated are reported in the array. For example, let's assume that we have defined UVs for the Diffuse, Ambient and Bump channels on layer 0. The resulting array will have the following three entries:
  • KFbxLayerElement::eDIFFUSE_TEXTURE
  • KFbxLayerElement::eAMBIENT_TEXTURE
  • KFbxLayerElement::eBUMP_TEXTURE

void InitMaterialIndices ( KFbxLayerElement::EMappingMode  pMappingMode  ) 

Initialize material indices.

Parameters:
pMappingMode  The mapping mode. This method must be called after KFbxGeometryBase::InitControlPoints(). The material indices refer to the position of a material in the KFbxLayerElementMaterial's direct array. See KFbxLayerElementMaterial for more details. Supported mapping types are eBY_CONTROL_POINT, eBY_POLYGON and eALL_SAME.
  • If mapping mode is eBY_CONTROL_POINT, there will be as many indices in the material index array as there are control points.
  • If mapping mode is eBY_POLYGON, there will be as many indices in the material index array as there are polygons in the mesh.
  • If mapping mode is eALL_SAME, there will be only one index in the material index array.
Remarks:
This function will set the Reference mode of the KFbxLayerElementMaterial on layer 0 to eINDEX_TO_DIRECT.

void InitTextureIndices ( KFbxLayerElement::EMappingMode  pMappingMode,
KFbxLayerElement::ELayerElementType  pTextureType  
)

Initialize texture indices.

Parameters:
pMappingMode  The mapping mode. The texture indices refer to the texture connection to the material. In older versions of the FBX SDK, the indices were referring to the entries in the direct array of the KFbxLayerElementTexture. See KFbxLayerElementTexture for more details. Supported mapping modes are eBY_POLYGON and eALL_SAME.
  • If mapping mode is eBY_POLYGON, there will be as many indices in the texture index array as there are polygons in the mesh.
  • If mapping mode is eALL_SAME, there will be only one index in the texture index array.
pTextureType  The texture channel identifier.
Remarks:
This function will set the Reference mode of the KFbxLayerElementTexture on layer 0 to eINDEX_TO_DIRECT.

void InitTextureUVIndices ( KFbxLayerElement::EMappingMode  pMappingMode,
KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  
)

Initialize texture UV indices.

Parameters:
pMappingMode  The mapping mode. The texture UV indices refer to the index of an element in the KFbxLayerElementUV's direct array. See KFbxLayerElementUV for more details. Supported mapping types are eBY_CONTROL_POINT , eBY_POLYGON_VERTEX and eALL_SAME.
  • If mapping mode is eBY_CONTROL_POINT, there will be as many indices in the UV index array as there are control points. This will also set the Reference mode of the KFbxLayerElementUV on layer 0 to eDIRECT.
  • If mapping mode is eBY_POLYGON_VERTEX, there will be an index in the UV index array for each vertex, for each polygon it is part of. This will also set the Reference mode of the KFbxLayerElementUV on layer 0 to eINDEX_TO_DIRECT.
  • If mapping mode is eALL_SAME, there will be no index in the UV index array. This will also set the Reference mode of the KFbxLayerElementUV on layer 0 to eDIRECT.
pTypeIdentifier  The texture channel the UVIndices refers to.

int GetTextureUVIndex ( int  pPolygonIndex,
int  pPositionInPolygon,
KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  
)

Get a texture UV index associated with a polygon vertex (i.e: an index to a control point).

Parameters:
pPolygonIndex  Index of polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonCount().
pPositionInPolygon  Position of polygon vertex in indexed polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonSize(pPolygonIndex).
pTypeIdentifier  The texture channel the UVIndex refers to.
Returns:
Return a texture UV index.
Remarks:
This function only works if the texture UV mapping mode is set to eBY_POLYGON_VERTEX, otherwise it returns -1.

void SetTextureUVIndex ( int  pPolygonIndex,
int  pPositionInPolygon,
int  pIndex,
KFbxLayerElement::ELayerElementType  pTypeIdentifier  
)

Set a texture UV index associated with a polygon vertex (i.e: an index to a control point).

Parameters:
pPolygonIndex  Index of polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonCount().
pPositionInPolygon  Position of polygon vertex in indexed polygon. The valid range for this parameter is 0 to KFbxMesh::GetPolygonSize(pPolygonIndex).
pIndex  The index of the texture UV we want to assign to the polygon vertex.
pTypeIdentifier  The texture channel the UVIndex refers to.
Remarks:
This function only works if the texture UV mapping type is set to eBY_POLYGON_VERTEX.

void Reset (  ) 

Reset the mesh to default values.

Frees and set to NULL all layers and clear the polygon and the control point array.

void ComputeVertexNormals ( bool  pCW = false  ) 

Compute the vertex normals on the mesh.

The normals are per vertex and are the average of all the polygon normals associated with each vertex.

Parameters:
pCW  True if the normals are calculated clockwise, false otherwise (counter-clockwise).

bool CheckIfVertexNormalsCCW (  ) 

Compares the normals calculated by doing cross-products between the polygon vertex and by the ones stored in the normal array.

Returns:
false if ALL of them are Clockwise. Returns true otherwise.

bool CheckSamePointTwice (  ) 

Verify if the mesh has polygons that are defined on the same point more than once.

Returns:
true if the mesh has that kind of polygon, false otherwise.

int RemoveBadPolygons (  ) 

Remove bad polygons from a mesh.

Degenerate polygons use a vertex more than once. Remove them from the mesh and from the layer element indices as needed.

Returns:
Number of polygons removed from the mesh, -1 if an error occurred.

bool SplitPoints ( KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  ) 

Split points.

Parameters:
pTypeIdentifier  Specify which UVs are processed.
Returns:
true if a split occurred, false otherwise.
Remarks:
This method replaces the BuildSplitList and SplitPointsForHardEdge.

bool BuildMergeList ( KArrayTemplate< int > &  pMergeList,
ESplitObject  pObject,
bool  pExport = false  
)

Insert the new indexes of the object that have to be merged.

Parameters:
pMergeList  The list that will contain the indexes of the objects to merge.
pObject  The object of interest of the merge.
pExport  If set to true, include the duplicate indexes in the merge list.

void MergePointsForPolygonVerteNormals ( KArrayTemplate< int > &  pMergeList  ) 

Merge the points specified in the list.

Parameters:
pMergeList  List containing the information on the points that will be merged.

void BuildMeshEdgeArray (  ) 

Automatically generate edge data for the mesh.

Clears all previously stored edge information

int GetMeshEdgeCount (  )  const

Query the number of edges defined on this mesh.

Returns:
The number of edges defined for this mesh

int GetMeshEdgeIndex ( int  pStartVertexIndex,
int  pEndVertexIndex,
bool &  pReversed  
)

Get the index for the edge between the given vertices.

Note that the result of this method is the same if pStartVertexIndex and pEndVertexIndex are swapped.

Parameters:
pStartVertexIndex  The starting point of the edge.
pEndVertexIndex  The ending point of the edge.
pReversed  flag will be set to true if the reverse edge is found, false otherwise.
Returns:
-1 if no edge exists for the given pair of vertices.

int GetMeshEdgeIndexForPolygon ( int  pPolygon,
int  pPositionInPolygon  
)

Get the index for the specific edge of pPolygon.

Parameters:
pPolygon  The polygon of interest.
pPositionInPolygon  The specific edge number in the polygon.
Returns:
-1 if the specific edge does not exist.

void GetMeshEdgeVertices ( int  pEdgeIndex,
int pStartVertexIndex,
int pEndVertexIndex  
) const

Get the vertices for the given edge.

Note that the values returned are indices into the control point array.

Parameters:
pEdgeIndex  The edge to query.
pStartVertexIndex  The edge's starting point will be stored here.
pEndVertexIndex  The edge's starting point will be stored here.

void BeginGetMeshEdgeVertices (  ) 

Use this method before calling GetMeshEdgeVertices if making several calls to that method.

Once done calling GetMeshEdgeVertices, call EndGetMeshEdgeVertices. This will optimize access time. Do not modify the mesh between calls to BeginGetMeshEdgeVertices and EndGetMeshEdgeVertices.

void EndGetMeshEdgeVertices (  ) 

Use this method after calling GetMeshEdgeVertices if making several calls to that method.

This will optimize access time. Do not modify the mesh between calls to BeginGetMeshEdgeVertices and EndGetMeshEdgeVertices.

void SetMeshEdgeCount ( int  pEdgeCount  ) 

Presets the number edge data elements.

Parameters:
pEdgeCount  The number of edges to allocate.

void SetMeshEdge ( int  pEdgeIndex,
int  pValue  
) [inline]

Sets element in edge array to specific value.

Parameters:
pEdgeIndex  The edge index
pValue  The edge data

Definition at line 532 of file kfbxmesh.h.

int AddMeshEdgeIndex ( int  pStartVertexIndex,
int  pEndVertexIndex,
bool  pCheckForDuplicates  
)

Add an edge with the given start/end points.

Note that the inserted edge may start at the given end point, and end at the given start point.

Parameters:
pStartVertexIndex  The starting point of the edge.
pEndVertexIndex  The ending point of the edge.
pCheckForDuplicates  Set to true to check if the mesh already contains an edge with these two points. Can be set to false to speed up this method, when the incoming edges are known to be consistent.
Returns:
Edge index of the new edge, or -1 on failure (edge/reverse edge already exists, no face using these 2 points consecutively )

int SetMeshEdgeIndex ( int  pEdgeIndex,
int  pStartVertexIndex,
int  pEndVertexIndex,
bool  pCheckForDuplicates  
)

Set the index for the edge with the given start/end points.

Note that the edge may start at the given end point, and end at the given start point.

Parameters:
pEdgeIndex  The edge index of the edge.
pStartVertexIndex  The starting point of the edge.
pEndVertexIndex  The ending point of the edge.
pCheckForDuplicates  Set to true to check if the mesh already contains an edge with these two points. Can be set to false to speed up this method, when the incoming edges are known to be consistent.
Returns:
Edge index of the edge, or -1 on failure (edge/reverse edge already exists, no face using these 2 points consecutively )

void BeginAddMeshEdgeIndex (  ) 

Call this before calling AddMeshEdgeIndex or SetMeshEdgeIndex to increase performance.

Once finished adding/setting edges EndAddMeshEdgeIndex should be called.

void EndAddMeshEdgeIndex (  ) 

After calling AddMeshEdgeIndex or SetMeshEdgeIndex, EndAddMeshEdgeIndex should be called.

int AddMeshEdgeIndexForPolygon ( int  pPolygonIndex,
int  pPositionInPolygon  
)

Adds an edge for the specified polygon, and edge number within the polygon.

See SetMeshEdgeIndex for notes the the parameters.

Parameters:
pPolygonIndex  The polygon of interest.
pPositionInPolygon  The edge within the polygon
Returns:
edge index or -1 if failed.

bool SetMeshEdgeIndex ( int  pEdgeIndex,
int  pPolygonIndex,
int  pPositionInPolygon  
)

Sets the specified edge to the specified polygon's edge.

Note that the position in the polygon ranges from 0 to GetPolygonSize(pPolygonindex) - 1 and represents the edge from GetPolygonVertex(pPolygonIndex, pPositionInPolygon) to GetPolygonVertex( pPolygonIndex, pPositionInPolygon + 1 ) or from pPositionInPolygon to 0 if pPositionInPolygon == GetPolygonSize(pPolygonindex) - 1

Parameters:
pEdgeIndex  The edge.
pPolygonIndex  The polygon.
pPositionInPolygon  The specific edge number in the polygon.
Returns:
true on success, false on failure. ( edge for the poly and position already exists )

void ComputeComponentMaps ( KFbxComponentMap pEdgeToPolyMap,
KFbxComponentMap pPolyToEdgeMap  
)

Compute component maps.

bool IsTriangleMesh (  )  const

Determines if the mesh is composed entirely of triangles.

Returns:
true if all polygons are triangles, false otherwise

void ReservePolygonCount ( int  pCount  )  [inline]

Reserve memory in the polygon array to hold the specified number of polygons.

Parameters:
pCount  The number of polygons this mesh will hold

Definition at line 615 of file kfbxmesh.h.

void ReservePolygonVertexCount ( int  pCount  )  [inline]

Reserve memory in the polygon vertex array to hold the specified number of polygon vertices.

Parameters:
pCount  The number of polygon vertices

Definition at line 621 of file kfbxmesh.h.

virtual KFbxObject* Clone ( KFbxObject pContainer,
KFbxObject::ECloneType  pCloneType  
) const [virtual]

Creates a clone of this object.

Parameters:
pContainer  The object, typically a document or a scene, that contains the new clone(can be NULL).
pCloneType  The type of clone to be created.
Returns:
The new clone, or NULL (if the specified clone type is not supported).

Reimplemented from KFbxGeometry.

bool GetTextureUV ( KFbxLayerElementArrayTemplate< KFbxVector2 > **  pLockableArray,
KFbxLayerElement::ELayerElementType  pTypeIdentifier = KFbxLayerElement::eDIFFUSE_TEXTURES  
) const

bool GetMaterialIndices ( KFbxLayerElementArrayTemplate< int > **  pLockableArray  )  const

bool GetTextureIndices ( KFbxLayerElementArrayTemplate< int > **  pLockableArray,
KFbxLayerElement::ELayerElementType  pTextureType  
) const

double GetEdgeCreaseInfo ( int  pEdgeIndex  ) 

Get crease weight by edge index.

Parameters:
pEdgeIndex  Edge index.
Returns:
Crease weight value in the range [0.0 - 1.0].

bool GetEdgeCreaseInfoArray ( KFbxLayerElementArrayTemplate< double > **  pCreaseArray  ) 

Get crease edge array.

Parameters:
pCreaseArray  Edge crease data array.
Returns:
true if the pCreaseArray is filled successfully.

double GetVertexCreaseInfo ( int  pVertexIndex  ) 

Get crease weight by vertex index.

Parameters:
pVertexIndex  Vertex index.
Returns:
Crease weight value in the range [0.0 - 1.0].

bool GetVertexCreaseInfoArray ( KFbxLayerElementArrayTemplate< double > **  pCreaseArray  ) 

Get vertex crease array.

Parameters:
pCreaseArray  Edge vertex data array.
Returns:
true if the pCreaseArray is filled successfully.

bool SetEdgeCreaseInfo ( int  pEdgeIndex,
double  pWeight  
)

Set crease weight by edge index.

Parameters:
pEdgeIndex  Edge index.
pWeight  Crease weight value in the range [0.0 - 1.0].
Returns:
true if successfully set the crease weight.

bool SetEdgeCreaseInfoArray ( KArrayTemplate< double > *  pWeightArray  ) 

Set crease weight data array.

Parameters:
pWeightArray  Edge crease data.
Returns:
true if successfully set the crease weight.

bool SetVertexCreaseInfo ( int  pVertexIndex,
double  pWeight  
)

Set crease weight by vertex index.

Parameters:
pVertexIndex  Vertex index.
pWeight  Crease weight value in the range [0.0 - 1.0].
Returns:
true if successfully set the crease weight.

bool SetVertexCreaseInfoArray ( KArrayTemplate< double > *  pWeightArray  ) 

Set crease weight data array.

Parameters:
pWeightArray  Vertex crease data.
Returns:
true if successfully set the crease weight.

KFbxMesh::EMeshSmoothness GetMeshSmoothness (  )  const

Get display smoothness from mesh.

Returns:
Mesh smoothness.
Remarks:
It represents smooth mesh preview mode.

void SetMeshSmoothness ( KFbxMesh::EMeshSmoothness  pSmoothness  ) 

Set the mesh display smoothness mode.

Parameters:
pSmoothness  New smoothness factor.
Remarks:
It represents smooth mesh preview mode.

int GetMeshPreviewDivisionLevels (  )  const

Get preview subdivision levels from mesh.

Returns:
Mesh preview subdivision levels.

void SetMeshPreviewDivisionLevels ( int  pPreviewDivisionLevels  ) 

Set mesh preview subdivision levels.

Parameters:
pPreviewDivisionLevels  Number of subdivisions levels.

int GetMeshRenderDivisionLevels (  )  const

Get render subdivision levels from mesh.

Returns:
Mesh render subdivision levels
Remarks:
Sometimes, render division level can be the same as preview level.

void SetMeshRenderDivisionLevels ( int  pRenderDivisionLevels  ) 

Set mesh render subdivision levels.

Parameters:
pRenderDivisionLevels  Number of subdivision levels.

bool GetDisplaySubdivisions (  )  const

Query whether to display subdivisions isolines on mesh.

Returns:
The current state of the internal flag.

void SetDisplaySubdivisions ( bool  pDisplySubdivisions  ) 

Set the DisplySubdivisions state.

Parameters:
pDisplySubdivisions  New value for this flag.

EBoundaryRule GetBoundaryRule (  )  const

Get BoundaryRule from mesh.

Returns:
Current value of the internal state.

void SetBoundaryRule ( EBoundaryRule  pBoundaryRule  ) 

Set BoundaryRule for this mesh.

Parameters:
pBoundaryRule  New value for the internal state of this mesh.
Remarks:
BoundaryRule will affect the corners of smooth mesh.

bool GetPreserveBorders (  )  const

Query whether to preserve borders when preview smooth mesh is enabled.

Returns:
The current state of the flag.

void SetPreserveBorders ( bool  pPreserveBorders  ) 

Set the state of the PreserveBorders flag.

Parameters:
pPreserveBorders  New value for this flag.
Remarks:
This flag value will affect smooth mesh preview results.

bool GetPreserveHardEdges (  )  const

Query whether to preserve hard edges when preview smooth mesh.

Returns:
The current state of the flag.

void SetPreserveHardEdges ( bool  pPreserveHardEdges  ) 

Set the state of the PreserveHardEdges flag.

Parameters:
pPreserveHardEdges  New value for this flag.
Remarks:
This flag value will affect smooth mesh preview results.

bool GetPropagateEdgeHardness (  )  const

Query whether to PropagateEdgeHardness when preview smooth mesh.

Returns:
The current state of the flag.

void SetPropagateEdgeHardness ( bool  pPropagateEdgeHardness  ) 

Set state of the PropagateEdgeHardness flag.

Parameters:
pPropagateEdgeHardness  New value for this flag.
Remarks:
This flag will affect smooth mesh preview results.

bool GetPolyHoleInfo ( int  pFaceIndex  ) 

Get hole flag by face index (an index to a polygon).

Parameters:
pFaceIndex  Index of the queried polygon.
Returns:
The hole flag for the given face.

bool GetPolyHoleInfoArray ( KFbxLayerElementArrayTemplate< bool > **  pHoleArray  ) 

Get hole flags Array.

Parameters:
pHoleArray  Hole flags array.
Returns:
true if the pHoleArray is filled successfully.

bool SetPolyHoleInfo ( int  pFaceIndex,
bool  pIsHole  
)

Sets the flag indicating whether the face represents a hole or not.

Parameters:
pFaceIndex  Index of the processed polygon.
pIsHole  If true, this face represent a hole.
Returns:
true if successfully set the hole info.

bool SetPolyHoleInfoArray ( KArrayTemplate< bool > *  pHoleArray  ) 

Set hole flags array.

Parameters:
pHoleArray  Hole flag array.
Returns:
true if successfully set the hole flags.
KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh
KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh KFbxMesh